package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func consumer(queue chan int) {
	defer wg.Done()
	for {
		data, ok := <-queue
		if !ok {
			break
		}
		fmt.Println(data, ok)
	}
}
func main() {
	/*
		channel提供了一种通信机制，定向，例如消息队列
	*/
	//1。定义一个channel
	var msg chan int
	//2.初始化这个channel,两种方式
	msg = make(chan int) //第一种方式：无缓冲
	//msg = make(chan int, 1) //第二种方式：有缓冲
	//3。在go语言中 使用make初始化的有三种 1.slice 2.map 3.channel

	wg.Add(1)
	go consumer(msg)
	msg <- 1 //将1放入到channel中
	msg <- 2
	//关闭channel 1.已经关闭的channel不能在发送数据
	//2。已经关闭的channel能够继续取数据，直到数据取完为止
	close(msg)
	wg.Wait()

}
